package cn.sjx.graduate.config;

import cn.sjx.graduate.domain.Employee;
import cn.sjx.graduate.exception.LoginException;
import cn.sjx.graduate.redisenum.RedisEnum;
import cn.sjx.graduate.util.TokenUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Component
public class MyInterceptor implements HandlerInterceptor {

    @Autowired
    private StringRedisTemplate redisService;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        /**
         * 前后端分离会涉及跨域的问题，
         * 跨域是浏览器会多发一个options请求来给后端询问后端看后端是否允许跨域
         * 所以在配置拦截器的时候，应该只拦截HandlerMethod 而不拦截其他比如询问是否允许跨域的这种请求方法
         * HandlerMethod里面带的是这次请求要访问的Controller里面中要调用到的数据，所以才需要拦截
         * 所以必须得在拦截器最前面设置一个这个表示 放开询问跨域的这种请求，而只拦截业务请求
         */
        if (!(handler instanceof HandlerMethod)) {
            return true;
        }

//        // 获取 token
//        String token = TokenUtil.getToken(request);
//        if("undefined".equals(token)) {
//            throw new LoginException("请先登录");
//        }
//
//        Employee user = JSON.parseObject(redisService.opsForValue().get(RedisEnum.USER_TOKEN.getRealKey(token)),Employee.class);
//        if (StringUtils.isBlank(user.getUsername())) {
//            throw new LoginException("请先登录");
//        }

        return true;
    }
}
